from rest_framework import serializers
from experience.models import Industry, JobCategory, JobTitle, WorkExperience, ProjectExperience

# 树形行业序列化器，用于序列化行业信息，支持树形结构展示
class IndustrySerializer(serializers.ModelSerializer):
    # SerializerMethodField是一个只读字段，用于序列化自定义方法返回的值
    # 这里用于获取当前行业的子行业列表
    children = serializers.SerializerMethodField()

    class Meta:
        # 指定关联的模型
        model = Industry
        # 指定需要序列化的字段
        fields = ['id', 'name', 'parent', 'order', 'is_active','children']

    def get_children(self, obj):
        '''
        自定义方法，用于获取当前行业的子行业列表
        :param obj: 当前行业对象
        :return: 子行业列表的序列化数据，如果没有子行业则返回空列表
        '''
        return IndustrySerializer(obj.children.all(), many=True).data if obj.children.exists() else []


# 树形职位类别序列化器，用于序列化职位类别信息，支持树形结构展示
class JobCategorySerializer(serializers.ModelSerializer):
    # SerializerMethodField是一个只读字段，用于序列化自定义方法返回的值
    # 这里用于获取当前职位类别的子类别列表
    children = serializers.SerializerMethodField()

    class Meta:
        # 指定关联的模型
        model = JobCategory
        # 指定需要序列化的字段
        fields = ['id', 'name', 'parent', 'order', 'is_active', 'children']

    def get_children(self, obj):
        '''
        自定义方法，用于获取当前职位类别的子类别列表
        :param obj: 当前职位类别对象
        :return: 子类别列表的序列化数据，如果没有子类别则返回空列表
        '''
        return JobCategorySerializer(obj.children.all(), many=True).data if obj.children.exists() else []


# 职位名称序列化器，用于序列化职位名称信息
class JobTitleSerializer(serializers.ModelSerializer):
    # 只读字段，用于显示职位所属的类别名称
    category_name = serializers.CharField(source='category.name', read_only=True)

    class Meta:
        # 指定关联的模型
        model = JobTitle
        # 指定需要序列化的字段
        fields = ['id', 'name', 'parent', 'category', 'order', 'is_active', 'category_name']



class IndustrySecondSerializer(serializers.ModelSerializer):
    class Meta:
        model = Industry
        fields = ['id', 'name']


class JobTitleWithCategorySerializer(serializers.ModelSerializer):
    category_name = serializers.StringRelatedField(source='category.name', read_only=True)

    class Meta:
        model = JobTitle
        fields = ['id', 'name', 'category_name']


# 工作经历序列化器，用于序列化用户的工作经历信息
class WorkExperienceSerializer(serializers.ModelSerializer):
    # 只读字段，用于显示行业名称
    industry_name = serializers.CharField(source='industry.name', read_only=True)
    # 只读字段，用于显示职位名称
    position_name = serializers.CharField(source='position.name', read_only=True)

    industry = serializers.PrimaryKeyRelatedField(
       queryset=Industry.objects.filter(
           parent__isnull=False,
           is_active=True
       ),
        allow_null = True,
        required = False,
        write_only = True
    )
    position = serializers.PrimaryKeyRelatedField(
       queryset=JobTitle.objects.filter(is_active=True),
        allow_null = True,
        required = False,
        write_only = True
    )

    class Meta:
        # 指定关联的模型
        model = WorkExperience
        # 排除不需序列化的字段
        exclude = ['empty1', 'empty2', 'empty3']
        read_only_fields = ['created_at', 'updated_at']



# 项目经历序列化器，用于序列化用户的项目经历信息
class ProjectExperienceSerializer(serializers.ModelSerializer):
    class Meta:
        # 指定关联的模型
        model = ProjectExperience
        # 序列化所有字段
        fields = '__all__'